package com.cmcc.shared.utils

import android.util.Log
import com.cmcc.shared.config.BaseConfig

object L {

    const val DEFAULT_TAG = "====="

    private const val LEVEL_VERBOSE = 1
    private const val LEVEL_DEBUG = 2
    private const val LEVEL_INFO = 3
    private const val LEVEL_WARN = 4
    private const val LEVEL_ERROR = 5
    private const val LEVEL_NONE = 6

    private var tagName = DEFAULT_TAG

    fun init(tagName: String) {
        this.tagName = if (tagName.isBlank()) DEFAULT_TAG else tagName
    }

    /**
     * 最低打印日志的级别
     */
    private var debugable = if (BaseConfig.isDebug) LEVEL_VERBOSE else LEVEL_NONE

    fun v(msg: String) {
        if (debugable <= LEVEL_VERBOSE) {
            Log.v(tagName, msg)
        }
    }

    fun d(msg: String) {
        if (debugable <= LEVEL_DEBUG) {
            Log.d(tagName, msg)
        }
    }

    fun i(msg: String) {
        if (debugable <= LEVEL_INFO) {
            Log.i(tagName, msg)
        }
    }

    fun w(msg: String) {
        if (debugable <= LEVEL_WARN) {
            Log.w(tagName, msg)
        }
    }

    fun w(tr: Throwable) {
        if (debugable <= LEVEL_WARN) {
            Log.w(tagName, tr)
        }
    }

    fun w(msg: String?, tr: Throwable) {
        if (debugable <= LEVEL_WARN && msg != null) {
            Log.w(tagName, msg, tr)
        }
    }

    fun e(msg: String) {
        if (debugable <= LEVEL_ERROR) {
            Log.e(tagName, msg)
        }
    }

    fun e(msg: String?, tr: Throwable) {
        if (debugable <= LEVEL_ERROR && msg != null) {
            Log.e(tagName, msg, tr)
        }
    }

    fun v(tag: String, msg: String) {
        if (debugable <= LEVEL_VERBOSE) {
            Log.v(tagName + tag, msg)
        }
    }

    fun d(tag: String, msg: String) {
        if (debugable <= LEVEL_DEBUG) {
            Log.d(tagName + tag, msg)
        }
    }

    fun i(tag: String, msg: String) {
        if (debugable <= LEVEL_INFO) {
            Log.i(tagName + tag, msg)
        }
    }

    fun w(tag: String, msg: String) {
        if (debugable <= LEVEL_WARN) {
            Log.w(tagName + tag, msg)
        }
    }

    fun e(tag: String, msg: String) {
        if (debugable <= LEVEL_ERROR) {
            Log.e(tagName + tag, msg)
        }
    }

}